$(function () {
    //jQuery的Id选择器: 每次都会根据Id从页面的开始位置寻找第一个对应的元素
    //可以把扫描抽取为一个通用的,扫描一次之后用变量保存起来,后面使用的到就直接引用变量即可
    var roleDatagrid,roleDialog,editForm,allPermissionDatagrid,selfPermissionDatagrid,allData
    roleDatagrid=$("#role_datagrid");
    roleDialog=$("#role_dialog");
    editForm=$("#editForm");
    allPermissionDatagrid=$("#allPermission_datagrid");
    selfPermissionDatagrid=$("#selfPermission_datagrid")
    //数据列表
    roleDatagrid.datagrid({
        url:"/role/list.do",
        fit:true,
        fitColumns:true,
        singleSelect:true,
        pagination:true,
        rownumbers:true,
        toolbar:"#role_datagrid_tb",
        columns:[
            [
                {title:"ID",field:"id",width:100,align:"center"},
                {title:"角色编码",field:"sn",width:100,align:"center"},
                {title:"角色名称",field:"name",width:100,align:"center"},
            ]
        ]
    })
    //对话框
    roleDialog.dialog({
        title:"角色编辑",
        width:650,
        height:450,
        closed:true,
        buttons:'#role_dialog_bt'
    });
    //所有权限列表的数据
    allPermissionDatagrid.datagrid({
        url:"/permission/listAll.do",
        title:"所有权限",
        height:300,
        width:250,
        singleSelect:true,
        rownumbers:true,
        columns:[
            [
                {title:"资源名称",field:"name",width:200,align:"center"}
            ]
        ],
        onDblClickRow:function (index, row) {
            //1 在已有权限列表中添加一行
            selfPermissionDatagrid.datagrid("appendRow",row);
            //2 在所有权限列表删除点击行
            allPermissionDatagrid.datagrid("deleteRow",index);

        },
        onLoadSuccess:function (data) {//加载成功时触发
            //$.extend(是否深度克隆,新的一个对象,需要克隆的对象);
           allData=$.extend(true,{},data);
           console.log(allData);
        }
    })
    //自身权限列表的数据
    selfPermissionDatagrid.datagrid({
        title:"已有权限",
        url:"/role/queryPermissionsByRoleId.do",
        height:300,
        width:250,
        singleSelect:true,
        rownumbers:true,
        columns:[
            [
                {title:"资源名称",field:"name",width:200,align:"center"}
            ]
        ],
        onDblClickRow:function (index, row) {
            //1 在所有权限列表中添加一行
            allPermissionDatagrid.datagrid("appendRow",row);
            //2 在已有权限列表删除点击行
            selfPermissionDatagrid.datagrid("deleteRow",index);

        },
        onLoadSuccess:function (data) {
            //开始去重操作
            console.log(data.rows);
            //获取到所有的已选权限的id
            var selectedIds=$.map(data.rows, function (value,index) {
                return value.id;
            });
            //获取到所有的权限
            var rowData = allPermissionDatagrid.datagrid("getRows");
            for(var index=rowData.length-1;index>=0;index--){//因为存在删除一个元素,后面的会替换上来,导致遍历的数据不准确
                if($.inArray(rowData[index].id,selectedIds)>-1){
                    allPermissionDatagrid.datagrid("deleteRow",index);
                }
            }
            console.log(selectedIds);
        }
    })
    //新增方法
    var cmdObj={
        add:function () {
            //1 清空表单数据
            editForm.form("clear");
            // 清空已有的权限数据
            selfPermissionDatagrid.datagrid("loadData",{total:0,rows:[]});
            //所有权限的datagrid加载allData数据即可
            console.log(allData);
            allPermissionDatagrid.datagrid("loadData",allData);
            //2 打开对话框
            roleDialog.dialog("open");
        },
        edit:function(){
                //0 判断是否选中数据
                var rowData = roleDatagrid.datagrid("getSelected");
                if(rowData){
                    //1 清空表单数据
                    editForm.form("clear");
                    // 清空已有的权限数据
                    selfPermissionDatagrid.datagrid("loadData",{total:0,rows:[]});
                    //所有权限的datagrid加载allData数据即可
                    allPermissionDatagrid.datagrid("loadData",allData);
                    //加载已有的权限数据 根据编辑的数据的角色id去重新查询一次
                    selfPermissionDatagrid.datagrid("load",{
                        roleId:rowData.id
                    });

                    //2 获取到选中的数据rowData, 基于同名匹配规则, 使用表单的load方法加载对象数据
                    if(rowData.dept){
                        rowData['dept.id']=rowData.dept.id;
                    }
                    editForm.form("load",rowData);
                    //2 打开对话框
                    roleDialog.dialog("open");
                }else{
                    $.messager.alert("温馨提示","请选择需要编辑的数据","warning");
                }

            },
        remove:function() {
            //0 判断是否选中数据
            var rowData = roleDatagrid.datagrid("getSelected");
            if(rowData){
                $.messager.confirm("温馨提示","亲,确定要删除该角色吗?",function (flag) {
                    if(flag){
                        $.get("/role/delete.do",{id:rowData.id},function (data) {
                            if(data.success){
                                $.messager.alert("温馨提示",data.msg,"info",function () {
                                    roleDatagrid.datagrid("reload");
                                });
                            }else{
                                $.messager.alert("温馨提示",data.msg,"error");
                            }
                        },"json")
                    }
                })
            }else{
                $.messager.alert("温馨提示","请选择需要编辑的数据","warning");
            }
        },
        save:function () {
                //1异步提交表单
                editForm.form("submit",{
                    url:"/role/saveOrUpdate.do",
                    onSubmit:function (param) {
                        var rowData = selfPermissionDatagrid.datagrid("getRows");
                        for(var index=0;index<rowData.length;index++){
                            param["permissions["+index+"].id"] =rowData[index].id;
                        }
                        return true;
                    },
                    success:function (data) { //{success:true,msg:'保存成功'}
                        data=$.parseJSON(data);
                        if(data.success){
                            $.messager.alert("温馨提示",data.msg,"info",function () {
                                //重新加载datagrid
                                roleDatagrid.datagrid("reload");
                                // 关闭对话框
                                roleDialog.dialog("close");
                            })
                        }else{
                            $.messager.alert("温馨提示",data.msg,"error");
                        }
                    }
                })
            },
        reload:function(){
            roleDatagrid.datagrid("reload");
        },
        cancel:function () {
            roleDialog.dialog("close");
        }
    }
    //给所有的a标签的按钮统一绑定点击事件
    $("a[data-cmd]").click(function () {
        var op=$(this).data("cmd")
        cmdObj[op]();
    })
});
